package com.demo.webapp.ui.paging.displayer;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.apache.struts2.views.freemarker.ScopesHashModel;

import com.demo.common.RegexUtils;
import com.demo.webapp.ui.displayer.FreemarkerDisplayerSupport;
import com.demo.webapp.ui.menu.MenuComponent.Type;
import com.demo.webapp.ui.paging.PageComponent;

import freemarker.template.Template;
import freemarker.template.TemplateModel;

/**
 * FreemarkerPageDisplayer
 * 使用freemarker作为Page的渲染对象;<br>
 * 该对象依赖于Struts2。使用FreemarkerManager对象进行管理<br>
 * 请参照Struts2的Freemarker配置说明<br>
 * FreemarkerPageDisplayer提供的参数：
 * <ol>
 *	<li>ognl : {@link org.apache.struts2.views.jsp.ui.OgnlTool}</li>
 *	<li>action</li>
 *	<li>request</li>
 *	<li>session</li>
 *	<li>application</li>
 *	<li>page</li>
 *	<li>displayer</li>
 *	<li>pageId</li>
 * </ol>
 * <code>Displayer</code>
 * <p>
 * 例如：
 * </p><pre>   
 *&lt;page:pageDisplayer name="Freemarker" config="/WEB-INF/paging/cssVerticalMenu.ftl" &gt;
 *	&lt;menu:menu name="AdminMenu"/&gt;
 *&lt;/page:pageDisplayer&gt;</pre>
 *<p>
 *<ul><li>name<br>
 *	映射为使用menu-config.xml中配置的Displayer名称；该配置freemarker渲染该menu内容</li>
 *	<li>config<br>
 *	使用哪种模板文件渲染Menu『config的基础路径为classpath.』</li>
 *</ul>
 *</p> 
 *      
 * @author ryuu.kk
 * @version 1.0
 */
public class FreemarkerPageDisplayer extends FreemarkerDisplayerSupport<PageComponent> {

	@Override
	protected boolean preTemplateProcess(PageComponent component, Template template,
			TemplateModel templateModel) {
		boolean result = true;

		ScopesHashModel hash = (ScopesHashModel) templateModel;
		//add something.
		//分页全局设置（常量）
		hash.put("page", component);
		//分页信息
		hash.put("pageSupport", component.getPageSupport());
		//使模板支持jsp标签
	  
        if (getPageContext().getAttribute("pageId") != null) {
        	hash.put("pageId", getPageContext().getAttribute("pageId"));
        }
        hash.put("displayer", this);
		return result;
	}

	@Override
	public String getType() {
		// do something
		return null;
	}
	
}
